home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1998 / MacHack 1998.toast / Sessions / STL / Slides / STL8.cp < prev    next >
Text File  |  1998-06-19  |  1KB  |  53 lines

  1. // STL8.cp
  2. #include <iostream>
  3. #include <string>
  4. #include <cstring>
  5. #include <MacTypes.h>
  6.  
  7. template<class PascalString>
  8. class PStrTemp
  9. {
  10.         PascalString s;
  11.         void    MakePString(const char *cString)
  12.         {
  13.             std::size_t length= std::strlen(cString);
  14.             s[0] = length > (sizeof(s) - 1)? (sizeof(s) - 1): length;
  15.             std::strncpy((char *)&s[1], cString, (sizeof(s) - 1));
  16.         };
  17.     public:
  18.         PStrTemp(const char *cString)
  19.         {
  20.             MakePString(cString);
  21.         };
  22.         PStrTemp(const std::string& stdString)
  23.         {
  24.             MakePString(stdString.c_str());
  25.         };
  26.         operator const unsigned char *() const {return s;};
  27. };
  28.  
  29. typedef PStrTemp<Str255> ConstStr255;
  30. typedef PStrTemp<Str63> ConstStr63;
  31. typedef PStrTemp<Str32> ConstStr32;
  32. typedef PStrTemp<Str31> ConstStr31;
  33. typedef PStrTemp<Str27> ConstStr27;
  34. typedef PStrTemp<Str15> ConstStr15;
  35.  
  36. using namespace std;
  37. void PStringFunction(ConstStr255Param stringValue);
  38. void PStringFunction(ConstStr255Param stringValue)
  39. {
  40.     string    outString((const char *)&stringValue[1], *stringValue);
  41.     cout << outString << endl;
  42. }
  43.  
  44. int main()
  45. {
  46.     char    *a = "C string";
  47.     string    b = "std::string";
  48.     PStringFunction(ConstStr255(a));
  49.     PStringFunction(ConstStr15(b));
  50. }
  51. // C string
  52. // std::string
  53.